[MBaaS] Parseで簡単モバイルバックエンド構築 – 【ざっと概要】
Parse.com
今話題のMBaaSの1つ
2013年のAndroid Advent Calendarでも話題にされたり、Effective Androidでも記事が執筆されるなど、モバイル・アプリケーション界隈で最近人気の出ているサービスです。 MBaaS(Mobile Backend as a Service) の名前の通り、このサービスを利用することで、モバイル・アプリケーションに必要な主要な機能をサーバーレスで実現することができます。 裏側ではAWSが動いているそうです。
それなりにボリュームがあるので、まずは第一弾として全体像を薄くざっくりと見てみます
MBaaS?
dropboxやGoogle Drive, iCloudなどをはじめ、Cloud上にデータを置くことは一般的に浸透してきました。 iOSやAndroidのモバイル端末でも、この流れは当然あるわけで、Cloud上にデータを保存・管理し、いつでもどこでもネットワークが繋がっていれば情報が同期できるというのは、必須の機能となってきています。
しかし、この機能を実現するために開発者が考えねばならないことや必要とすべきスキルは非常に多岐に渡ります。ざっと思いつく限りのものをさらっと見て行きます
機能 | 必要なもの |
---|---|
データストア | サーバなどのハードウェア 対象データのCRUDを行うRDBMSの導入、構築を含め |
クライアントからの接続を受け付けるインターフェース | Webサーバー(ハードウェア、ソフトウェア)、REST APIの知識(URL設計含め)、負荷を分散させるロードバランサなど |
ユーザー管理 | ACLに基づいた適切なデータへのアクセス認可など |
モバイル・アプリケーションのエンジニアは、これらの作業やスキル修得を、本来のモバイル・アプリケーション開発の片手暇で行わねばなりません。 これらのスキルセットを全て網羅していることはどれくらいいるでしょうか? 一人でこれら全てをスキルセットとして持っておくのは一部のモヒカン、希少種レベルの方々以外、あまり現実的ではないと思います。 MBaaS はこれらの機能を全部まとめて面倒を見てくれる上、容易なインタフェースのお蔭で、ズブの素人でもそれなりに軽量なサーバインフラを管理/構築することが可能になっています。これらを使わない手はありません。 特にモバイル・アプリケーションの開発はサーバサイドの予算までとるのが難しかったり、そもそも人的リソースが足りない場合が多いと思いますので、こういったサービスを利用することは非常に有用です。積極的に利用したいところです。
特徴
Parseの話に戻りましょう。Parseは特にモバイル・アプリケーションのバックエンドに特化した便利な機能を提供してくれます。 特にプッシュ通知やTwitter、FBなどのSNS連携によるユーザー管理などはモバイル・アプリケーションには実装が面倒だったり、サーバーが必要だったりと何かと面倒なので、予めサービスを用意しておいてもらえると、とても有用な機能です
プランとスペック
気になる料金体系とスペックですが、Free、Pro、Enterpriseの3種類です。
Freeでも個人であれば充分なほどの機能が提供されています。 月当たり100万リクエスト、月当たりのプッシュ通知は100万回、1秒間にアクセスできるリクエスト回数は20回となっています。 詳細はこちら
プッシュ通知、ユーザ管理機能、データストアなど主要な機能を提供
プッシュ通知はモバイル・アプリケーションの特徴の一つでしょう。あまりに通知しすぎると半ばスパムとして辟易されてしまう機能ではありますが、正しい使い方をすれば、非常に有効な機能です。これをはじめからサービスとして簡単に利用できるようになっています。 機能としては非常にポピュラーではありますが、対応OSごとに実装が異なっていたり、設定なども全く異なることが多いため、準備も実装も面倒なところです。そのため、簡単なインタフェースで手軽に設定できるのは大変助かります。
ユーザー管理は簡単なACLを付与することもでき、データへのアクセスコントロール管理も比較的容易です。Twitter、FB連携によるユーザー情報の登録や管理なども簡単にできるのも非常に嬉しいところです。
当然データストアもあります(というか、これが本来の目的だと思われます) プリミティブな型からファイル型なども含め、様々な形式をサポートしています。ここは拡張性はない箇所ですが、こんな型いるのかな?と思うようなものなどかなり幅広く用意されているので、これで機能が足らないということはあまりないでしょう。
多様なOSに対応したSDKの提供
Parseが提供してくれるSDKの対応種類の多さは他の追随を許さないものがあります 対応しているのは次の通り
- iOS
- Android
- OS X
- Javascript
- Windows Phone 8 SDK
- Windows 8 SDK
- .NET SDK
- Xamarin SDK
- Unity SDK
Amazing!
現在動いている最新の言語やらフレームワークでは大体動くのではないでしょうか。
まあ、Java, Scalaとかありませんけども。ぐぬぬ(AA略
サーバーサイドはほぼコードレス
データストアにデータを定義するだけで、そのままREST APIでアクセス可能になります。インターフェースを考えて書く必要もないのです。リレーションを張ったり複数テーブルをまたいだ処理などを組み込むと、若干拡張が必要になりますが、基本的に必要最小限で事足ります
例としてREST APIを利用してアクセスしてみましょう
データストアに「Event」クラスを作ってアクセスしてみます
項目名 | 型 | 備考 |
---|---|---|
objectId | String | これはデフォルトではじめから自動的に生成される必須項目。自動生成される一意なObjectID |
name | String | イベント名称 |
eventCode | Number | イベントコード |
url | String | イベントのURL |
createdAt | Date | これはデフォルトではじめから自動的に生成される必須項目。生成日時を自動的に生成 |
updateAt | Date | これはデフォルトではじめから自動的に生成される必須項目。更新日時を自動的に更新 |
ACL | ACL | これはデフォルトではじめから自動的に生成される必須項目。デフォルトは空。
アクセスコントロールを行う場合必須 |
呼び出すIF
上のようなデータ定義を行うとREST APIで以下のようにアクセス可能です。REST API に沿ってアクセス
import json,httplib connection = httplib.HTTPSConnection('api.parse.com', 443) connection.connect() connection.request('POST', '/1/classes/Event', json.dumps({ "name": "SampleEvent", "eventCode" : 100, "url" : "https://dev.classmethod.jp", }), { "X-Parse-Application-Id": "<Your Application ID>", "X-Parse-REST-API-Key": "<Your REST API KEY>", "Content-Type": "application/json" }) result = json.loads(connection.getresponse().read()) print result
この例はPOSTでのアクセスなので、Object作成になります。 サーバーのコードは一行も書かないのにデータ定義のみで、CRUDのCreate機能が定義されていました。 Wonderful!
Parseの主要な機能を詳しく
ユーザー管理機能・アクセスコントロール
特徴は次の通り
- User管理のクラス有りマス
- Twitter、FB連携による認証
- メールによる確認
- ACL設定有りマス
Userデータのクラスはあらかじめ用意されています。ID、パスワードをはじめ、E-Mail確認, Twitter, Facebook認証, アクセスコントロールなどが用意されています
Twitter連携、FB連携を標準でサポート
- Twitterでの認証を標準サポート
- Facebookでの認証を標準サポート
ユーザー認証に各SNS連携の機能を利用することができます。設定値を設定するだけですのでかなりお手軽に利用できます。各SNSで認証をすると、Parse内にSNS情報とリンクしたユーザーデータが自動的に作成されます 以前はセキュリティ的に?なところがあったようですが、今は改善されているようです。
有効・無効を切り替えるチェックと、FacebookのApplication ID、TwitterのConsumer Keyの入力欄だけ、と大変シンプルなIFです。
各種OSへのPush通知をサポート
- Push通知の設定有りマス!
- iOS対応
- Windows 8対応
簡単な設定だけで、Push通知の設定ができてしまいます。各種OSの設定値や認証ファイルを設定してあげるシンプルな設定画面のみです。
こちらは各サービスごとに少し準備に手間がかかりますが、設定する項目の数は少なく分かりやすいIFだと思います。
多様なデータを格納できるデータストア
- String, Numberなどのプリミティブなデータをサポート
- FileとかACLとかちょっと特殊なのもあるよ!
WebのIFからデータを格納するデータストアの定義を行うことができます
基本的にデータは全てJSONで表現されているようです。自由に項目が設定可能なCustomクラス, ユーザー情報を管理、格納できるUserクラスなどを作成することができます。 objectId(一意なID), createdAt(生成日時), updatedAt(更新日時), ACL(アクセスコントロール)は、必須の項目になるようです。
データへアクセスするためのREST API
- オブジェクトクラスを定義するだけ
- REST APIで割と何でもアクセス可
例で見たように、データストアのオブジェクトクラスを定義すると、各種REST APIでデータストアの操作が可能になります。POST, GET, PUT, DELETEなどの各種メソッドを使い、データの操作をWeb IFを通して行うことができます。Parse docs REST API
ここでは
サーバサイドの動作を拡張するためのCloud Code
- javascriptで拡張可!
- Localでコードを記述してDeployするツールを提供
- スケジュールされたジョブも書けるよ
複数のオブジェクトにアクセスしたい場合、保存後に何か処理をフックしたい場合、そういう用途は必ず出てきます。サーバー側の動作を拡張するためにCloud Codeが用意されています。 javascriptを使って、データストアへのアクセス処理など色々と拡張することができるようです。 Webブラウザ上で編集する必要はなく、ローカルで編集したファイルをdeployするためのコマンドや、Cloud Codeを記述するためのTemplate作成のコマンドなどもきちんと準備されているので、MacやLinuxがあればすぐにすぐに開発環境を整えることができます。詳細はこちら
自分のローカル環境でCloud Codeを作成・編集し、簡単にサーバー側へdeployすることができます。
console.log()などで出力したLogもブラウザ上で確認することができます。
作成したアプリケーションへのアクセス解析
- リクエストの監視ができるよ
- Push通知の監視もできるよ
- その他も色々ロギング可
Anaylyticsの機能を有しているので、サービスへどのようなアクセスがあったかをグラフィカルに確認することができます。これもREST APIでアクセス可能なのでデータとして取り出して、自前の差0ビスでデータを表示、監視するなども可能なのでしょう
これらの統計データをCSVとしてExportすることも可能です
確認できる項目は以下のとおり
- API Requests : APIを通して機能がCallされた回数のデータ
- File Requests : ファイルを要求された回数のデータ。データ定義のFileと関係がありそう
- Push Notifications : プッシュ通知を行った回数データ
- Apps Open : アプリケーションが実行された回数データ?
また、これらの複数の項目を重ねて見ることもできるようです。
まとめ
魅力的な機能が大量に入っているサービスです。今回ここで紹介できたのはほんのさわりの部分だけです。 今後はこれらの機能や各OSのSDKを詳しく見て、より深く理解し使いこなせるようになりたいところです。 これからのモバイルアプリケーションのエンジニアは、こう言ったサービスを有効に使いながら、アプリケーションの開発に注力して、より素晴らしいものをより早く世に送り出せるようになるのではないでしょうか。
ところで、なんでこんなにググラビリティの低いサービス名にしたんでしょうか。。。 Google先生に頼りきりの人達(自分を含む)の方々はうまくタンゴを選びながら情報を探さないと、情報にたどりつくまで、なかなか遠回りをさせられそうです。 当面の間はStack Overflowと公式ドキュメントをうろうろすることになりそうです。
次回からは、各OSのSDKを解説します。iOSは 平井 祐樹, Androidは 諏訪 悠紀 が担当します。
それでは皆様ごきげんよう